home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / dev / src / wangisrc.lha / wangi / z / SM / SMPrefs / Window_GadgetED.PAS < prev    next >
Pascal/Delphi Source File  |  1995-07-11  |  13KB  |  419 lines

  1. Function GadEDWindow; 
  2.  
  3. CONST
  4.     NI         = 0; 
  5.     CC         = 1;
  6.     G_TXT      = 2; 
  7.     G_CMDD     = 3; 
  8.     G_CMDF     = 4; 
  9.     G_CMDREQ   = 5; 
  10.     G_KEY      = 6; 
  11.     G_STACK    = 7; 
  12.     G_PRIORITY = 8; 
  13.     G_RCMD     = 9; 
  14.     G_RPORT    = 10; 
  15.     G_SYNCH    = 11;
  16.     G_OUT      = 12; 
  17.     G_QUIT     = 13;
  18.     G_SHELL    = 14;
  19.     G_SHELLT   = 15;
  20.     G_SHELLW   = 16;
  21.     G_OK       = 17; 
  22.     G_CAN      = 18;
  23.  
  24. VAR 
  25.     T            : Array[0..13] of tTagItem;
  26.     CmdFile, CmdDir, Key : String;
  27.     GadFlags     : tNewGadget;
  28.     G            : Array[NI..G_CAN] of pGadget;
  29.     cr           : pFileRequester;
  30.     dummy        : LONG;
  31.     ExitFlag, OK, cont : Boolean;
  32.     TheWin       : pWindow;
  33.     message      : pIntuiMessage;
  34.     MsgClass     : LongInt;
  35.     gadID        : LONG;
  36.     StrInfo      : pStringInfo;
  37.     l            : Pointer;
  38.     l2           : LONG;
  39.     ret          : Boolean;
  40.     RK           : pRemember;
  41.     l3           : BPTR;
  42.     strp         : STRPTR;
  43.  
  44. begin
  45.     cr := NIL;
  46.     ret := false;
  47.     Key := node^.LSK_Key;
  48.     RK := NIL;
  49.     G[NI] := NIL;
  50.     G[CC] := CreateContext(@g[NI]);
  51.     If G[CC] <> NIL Then begin
  52.  
  53.     T[0].ti_Tag  := GA_Disabled;
  54.     T[0].ti_Data := False_;
  55.     T[1].ti_Tag  := GT_UnderScore;
  56.     T[1].ti_Data := LONG('_');
  57.     T[2].ti_Tag  := GTST_MaxChars;
  58.     T[2].ti_Data := 31;
  59.     T[3].ti_Tag  := GTST_String;
  60.     T[3].ti_Data := LONG(CStrConstPtrAR(@RK, node^.LSK_Name));
  61.     T[4].ti_Tag  := TAG_DONE;
  62.     With GadFlags Do Begin
  63.         ng_TextAttr   := @My_Font;
  64.         ng_Width      := Sizes[S_G2_W] div 2;
  65.         ng_LeftEdge   := Sizes[TxtWin_L]+4;
  66.         ng_TopEdge    := Sizes[TBS] + 4;
  67.         ng_Height     := Sizes[S_GAD_H];
  68.         ng_GadgetText := CStrConstPtrAR(@RK, 'Gadget Text');
  69.         ng_GadgetID   := G_TXT;
  70.         ng_VisualInfo := vi;
  71.         ng_Flags      := 0;
  72.     End;
  73.     G[G_TXT] := CreateGadgetA(STRING_KIND, G[CC], @GadFlags, @T);
  74.  
  75.     T[2].ti_Tag  := GTST_MaxChars;
  76.     T[2].ti_Data := 1;
  77.     T[3].ti_Tag  := GTST_String;
  78.     T[3].ti_Data := LONG(CStrConstPtrAR(@RK, Key));
  79.     T[4].ti_Tag  := TAG_DONE;
  80.     With GadFlags Do Begin
  81.         ng_Width      := Sizes[S_G2_W] div 6;
  82.         ng_LeftEdge   := Sizes[TxtWin_L]+Sizes[S_G2_W]-(ng_Width)+4;
  83.         ng_GadgetText := CStrConstPtrAR(@RK, 'Key');
  84.         ng_GadgetID   := G_KEY;
  85.     End;
  86.     G[G_KEY] := CreateGadgetA(STRING_KIND, G[G_TXT], @GadFlags, @T);
  87.  
  88.     T[2].ti_Data := 180;
  89.     T[3].ti_Data := LONG(CStrConstPtrAR(@RK, node^.LSK_Cmd[0]));
  90.     With GadFlags Do Begin
  91.     ng_LeftEdge   := Sizes[TxtWin_L]+4;
  92.     ng_Width      := Sizes[S_G2_W];
  93.     ng_TopEdge    := ng_TopEdge + ng_Height + 1;
  94.     ng_GadgetText := CStrConstPtrAR(@RK, 'Directory');
  95.     ng_GadgetID   := G_CMDD;
  96.     End;
  97.     G[G_CMDD] := CreateGadgetA(STRING_KIND, G[G_KEY], @GadFlags, @T);
  98.  
  99.     T[3].ti_Data := LONG(CStrConstPtrAR(@RK, node^.LSK_Cmd[1]));
  100.     With GadFlags Do Begin
  101.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  102.         ng_GadgetText := CStrConstPtrAR(@RK, 'Command');
  103.         ng_GadgetID   := G_CMDF;
  104.         ng_Width      := Sizes[S_G2_W]-(Sizes[TBS]*2);
  105.     End;
  106.     G[G_CMDF] := CreateGadgetA(STRING_KIND, G[G_CMDD], @GadFlags, @T);
  107.  
  108.     T[2].ti_Tag := TAG_END;
  109.     With GadFlags Do Begin
  110.         ng_LeftEdge   := ng_LeftEdge+ng_Width;
  111.         ng_Width      := Sizes[TBS]*2;
  112.         ng_GadgetText := CStrConstPtrAR(@RK, '^');
  113.         ng_GadgetID   := G_CMDREQ;
  114.     End;
  115.     G[G_CMDREQ] := CreateGadgetA(BUTTON_KIND, G[G_CMDF], @GadFlags, @T);
  116.  
  117.     T[2].ti_Tag  := GTCB_Checked;
  118.     T[2].ti_Data := ord(node^.LSK_ASynch);
  119.     T[3].ti_Tag  := $80080044;  { GTCB_Scaled }
  120.     T[3].ti_Data := True_;
  121.     T[4].ti_Tag  := TAG_END;
  122.     With GadFlags Do Begin
  123.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  124.         ng_LeftEdge   := Sizes[TxtWin_L]+4;
  125.         ng_GadgetText := CStrConstPtrAR(@RK, 'Asynchronous');
  126.         ng_Width      := Sizes[S_CM_W];
  127.         ng_GadgetID   := G_SYNCH;
  128.     End;
  129.     G[G_SYNCH] := CreateGadgetA(CHECKBOX_KIND, G[G_CMDREQ], @GadFlags, @T);
  130.     
  131.     T[2].ti_Data := ord(Node^.LSK_Quit);
  132.     With GadFlags Do Begin
  133.         ng_LeftEdge   := Sizes[S_G2_W]+ng_LeftEdge-ng_Width;
  134.         ng_GadgetText := CStrConstPtrAR(@RK, 'Quit After');
  135.     End;
  136.     G[G_QUIT] := CreateGadgetA(CHECKBOX_KIND, G[G_SYNCH], @GadFlags, @T);
  137.  
  138.     T[2].ti_Tag  := GTIN_MaxChars;
  139.     T[2].ti_Data := 4;
  140.     T[3].ti_Tag  := GTIN_Number;
  141.     T[3].ti_Data := node^.LSK_Priority;
  142.     With GadFlags Do Begin
  143.         ng_LeftEdge   := Sizes[TxtWin_L]+4;
  144.         ng_Width      := Sizes[S_G2_W] div 4;
  145.         ng_GadgetText := CStrConstPtrAR(@RK, 'Priority');
  146.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  147.         ng_GadgetID   := G_PRIORITY;
  148.     End;
  149.     G[G_PRIORITY] := CreateGadgetA(INTEGER_KIND, G[G_QUIT], @GadFlags, @T);
  150.  
  151.     T[2].ti_Data := 8;
  152.     T[3].ti_Data := node^.LSK_Stack;
  153.     With GadFlags Do Begin
  154.         ng_Width      := Sizes[S_G2_W] div 3;
  155.         ng_LeftEdge   := ng_LeftEdge + Sizes[S_G2_W] - ng_Width;
  156.         ng_GadgetText := CStrConstPtrAR(@RK, 'Stack');
  157.         ng_GadgetID   := G_STACK;
  158.     End;
  159.     G[G_STACK] := CreateGadgetA(INTEGER_KIND, G[G_PRIORITY], @GadFlags, @T);
  160.  
  161.     T[2].ti_Tag  := GTST_MaxChars;
  162.     T[2].ti_Data := 180;
  163.     T[3].ti_Tag  := GTST_String;
  164.     T[3].ti_Data := LONG(CStrConstPtrAR(@RK, node^.LSK_Output));
  165.     T[4].ti_Tag  := TAG_DONE;
  166.     With GadFlags Do Begin
  167.         ng_LeftEdge   := Sizes[TxtWin_L]+4;
  168.         ng_Width      := Sizes[S_G2_W];
  169.         ng_GadgetText := CStrConstPtrAR(@RK, 'Input/Output');
  170.         ng_GadgetID   := G_OUT;
  171.         ng_Flags      := PLACETEXT_LEFT;
  172.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  173.     End;
  174.     G[G_OUT] := CreateGadgetA(STRING_KIND, G[G_STACK], @GadFlags, @T);
  175.  
  176.     if Rexxwished then
  177.         T[0].ti_Data := false_
  178.     else
  179.         T[0].ti_Data := true_;
  180.     T[3].ti_Data := LONG(CStrConstPtrAR(@RK, node^.LSK_RexxCmd));
  181.     With GadFlags Do Begin
  182.         ng_GadgetText := CStrConstPtrAR(@RK, 'ARexx Command');
  183.         ng_GadgetID   := G_RCMD;
  184.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  185.     End;
  186.     G[G_RCMD] := CreateGadgetA(STRING_KIND, G[G_OUT], @GadFlags, @T);
  187.     
  188.     T[2].ti_Data := 25;
  189.     T[3].ti_Data := LONG(CStrConstPtrAR(@RK, node^.LSK_RexxPort));
  190.     With GadFlags Do Begin
  191.         ng_GadgetText := CStrConstPtrAR(@RK, 'ARexx Port');
  192.         ng_GadgetID   := G_RPORT;
  193.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  194.     End;
  195.     G[G_RPORT] := CreateGadgetA(STRING_KIND, G[G_RCMD], @GadFlags, @T);
  196.  
  197.     T[0].ti_Data := false_;
  198.     T[2].ti_Tag  := GTCB_Checked;
  199.     T[2].ti_Data := ord(Node^.LSK_NewShell);
  200.     T[3].ti_Tag  := $80080044;  { GTCB_Scaled }
  201.     T[3].ti_Data := True_;
  202.     T[4].ti_Tag  := TAG_END;
  203.     With GadFlags Do Begin
  204.         ng_GadgetText := CStrConstPtrAR(@RK, 'New Shell');
  205.         ng_Width      := Sizes[S_CM_W];
  206.         ng_Flags      := PLACETEXT_LEFT;
  207.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  208.     End;
  209.     G[G_SHELL] := CreateGadgetA(CHECKBOX_KIND, G[G_RPORT], @GadFlags, @T);
  210.     
  211.     T[2].ti_Tag  := GTST_MaxChars;
  212.     T[2].ti_Data := 80;
  213.     T[3].ti_Tag  := GTST_String;
  214.     T[3].ti_Data := LONG(CStrConstPtrAR(@RK, node^.LSK_ShellFrom));
  215.     T[4].ti_Tag  := TAG_DONE;
  216.     With GadFlags Do Begin
  217.         ng_LeftEdge   := ng_LeftEdge + ng_Width + (((Sizes[TxtWin_L] + Sizes[S_G2_W]+4-(ng_LeftEdge + ng_Width))) div 2);
  218.         ng_Width      := (Sizes[TxtWin_L] + Sizes[S_G2_W]+4)-ng_LeftEdge;
  219.         ng_GadgetText := CStrConstPtrAR(@RK, 'From');
  220.     End;
  221.     G[G_SHELLT] := CreateGadgetA(STRING_KIND, G[G_SHELL], @GadFlags, @T);
  222.     
  223.     T[3].ti_Data := LONG(CStrConstPtrAR(@RK, node^.LSK_ShellWin));
  224.     With GadFlags Do Begin
  225.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  226.         ng_GadgetText := CStrConstPtrAR(@RK, 'Window');
  227.     End;
  228.     G[G_SHELLW] := CreateGadgetA(STRING_KIND, G[G_SHELLT], @GadFlags, @T);
  229.     
  230.     T[0].ti_Tag := TAG_END;
  231.     With GadFlags Do Begin
  232.         ng_LeftEdge   := Sizes[S_WB_L]+8;
  233.         ng_Width      := (Sizes[S_G2_W] div 3);
  234.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 8;
  235.         ng_GadgetText := CStrConstPtrAR(@RK, 'Ok');
  236.         ng_GadgetID   := G_OK;
  237.         ng_Flags      := 0;
  238.     End;
  239.     G[G_OK] := CreateGadgetA(BUTTON_KIND, G[G_SHELLW], @GadFlags, @T);
  240.  
  241.     With GadFlags Do Begin
  242.         ng_LeftEdge   := Sizes[TxtWin_L] + Sizes[S_G2_W]+4-ng_Width; 
  243.         ng_GadgetText := CStrConstPtrAR(@RK, 'Cancel');
  244.         ng_GadgetID   := G_CAN;
  245.     End;
  246.     G[G_CAN] := CreateGadgetA(BUTTON_KIND, G[G_OK], @GadFlags, @T);
  247.          
  248.     T[0].ti_Tag  := WA_Left;
  249.     T[0].ti_Data := Left;
  250.     T[1].ti_Tag  := WA_Top;
  251.     T[1].ti_Data := Top;
  252.     T[2].ti_Tag  := WA_InnerWidth;
  253.     T[2].ti_Data := Sizes[TxtWin_L] + Sizes[S_G2_W]+8;
  254.     T[3].ti_Tag  := WA_Height;
  255.     T[3].ti_Data := g[G_CAN]^.TopEdge + g[G_CAN]^.Height + Sizes[S_WB_B] + 4;
  256.     T[4].ti_Tag  := WA_Title;
  257.     T[4].ti_Data := LONG(CStrConstPtrAR(@RK, 'Edit Gadget.')); 
  258.     T[5].ti_Tag  := WA_IDCMP;
  259.     T[5].ti_Data := STRINGIDCMP|BUTTONIDCMP|IDCMP_GADGETUP|IDCMP_REFRESHWINDOW|IDCMP_CLOSEWINDOW;
  260.     T[6].ti_Tag  := WA_DragBar;
  261.     T[6].ti_Data := True_;
  262.     T[7].ti_Tag  := WA_DepthGadget;
  263.     T[7].ti_Data := True_;
  264.     T[8].ti_Tag  := WA_AutoAdjust;
  265.     T[8].ti_Data := True_;
  266.     T[9].ti_Tag  := WA_Activate;
  267.     T[9].ti_Data := True_;
  268.     T[10].ti_Tag := WA_Gadgets;
  269.     T[10].ti_Data:= LONG(g[NI]);
  270.     T[11].ti_Tag := WA_SimpleRefresh;
  271.     T[11].ti_Data:= True_; 
  272.     T[12].ti_Tag := WA_CloseGadget;
  273.     T[12].ti_Data:= True_; 
  274.     T[13].ti_Tag := TAG_DONE;
  275.     
  276.     TheWin := OpenWindowTaglist(NIL,@T);
  277.     If TheWin <> NIL Then begin
  278.         GT_RefreshWindow(TheWin, NIL);
  279.  
  280.         ExitFlag := False;
  281.         While Not exitflag Do Begin
  282.             dummy := Wait(BitMask(TheWin^.UserPort^.MP_SIGBIT));
  283.             Repeat
  284.                 cont := True;
  285.                 message  := GT_GetIMsg(TheWin^.userPort);
  286.                 If message <> NIL then begin
  287.                     MsgClass := message^.Class;
  288.                     if MsgClass = IDCMP_GADGETUP then begin
  289.                         GadID := pGadget(message^.IAddress)^.GadgetID;
  290.                         StrInfo  := pGadget(message^.IAddress)^.SpecialInfo;
  291.                     end;
  292.                     GT_ReplyIMsg(message);
  293.                     Case MsgClass Of
  294.           
  295.                         IDCMP_REFRESHWINDOW : Begin
  296.                             GT_BeginRefresh(TheWin);
  297.                             GT_EndRefresh(TheWin, True);
  298.                         end;
  299.               IDCMP_CLOSEWINDOW : ExitFlag := True;
  300.                         IDCMP_GADGETUP : Begin
  301.                             Case GadID Of
  302.                                 G_CMDREQ  : begin
  303.                                     l := pointer(rtLockWindow(TheWin));
  304.                    
  305.                                     StrInfo := g[G_CMDD]^.SpecialInfo;
  306.                                     CmdDir := PtrToPas(strinfo^.Buffer)+#0;
  307.                                     StrInfo := g[G_CMDF]^.SpecialInfo;
  308.                                     CmdFile := PtrToPas(strinfo^.Buffer)+#0;
  309.                 
  310.                                     T[0].ti_Tag  := ASLFR_TitleText;
  311.                                     T[0].ti_Data := LONG(CStrConstPtrAR(@RK, 'Pick Command'));
  312.                                     T[1].ti_Tag  := ASLFR_Window;
  313.                                     T[1].ti_Data := long(TheWin);
  314.                                     T[2].ti_Tag  := ASLFR_Flags1;
  315.                                     T[2].ti_Data := 0;
  316.                                     T[3].ti_Tag  := ASLFR_InitialPattern;
  317.                                     T[3].ti_Data := LONG(CStrConstPtrAR(@RK, '~(#?.info)'));
  318.                                     T[4].ti_Tag  := ASLFR_InitialDrawer;
  319.                                     T[4].ti_Data := long(@CmdDir[1]);
  320.                                     T[5].ti_Tag  := ASLFR_InitialFile;
  321.                                     T[5].ti_Data := long(@CmdFile[1]);
  322.                                     T[6].ti_Tag  := TAG_DONE;
  323.     
  324.                                     cr := AllocASLRequest(ASL_FileRequest, @T[0]);
  325.                 
  326.                                     if AslRequest(cr, NIL) then begin
  327.                    
  328.                            l3 := Lock(STRPTR(cr^.fr_Drawer), ACCESS_READ);
  329.                            if l3 <> NULL then begin
  330.                                strp := AllocMem(180, MEMF_CLEAR);
  331.                                if strp <> NIL then begin
  332.                                    if NameFromLock(l3,strp,180) then begin
  333.                                        CmdDir := PtrToPas(strp)+#0;
  334.                                                     CmdFile := PtrToPas(STRPTR(cr^.fr_file))+#0;
  335.     
  336.                                                     T[0].ti_Tag  := GTST_String;
  337.                                                     T[0].ti_Data := LONG(CStrConstPtrAR(@RK, CmdFile));
  338.                                                     T[1].ti_Tag  := TAG_END;
  339.                                                     GT_SetGadgetAttrsA(g[G_CMDF], TheWin, NIL, @T);
  340.     
  341.                                                     T[0].ti_Data := LONG(CStrConstPtrAR(@RK, CmdDir));
  342.                                                     GT_SetGadgetAttrsA(g[G_CMDD], TheWin, NIL, @T);
  343.                                                 end;
  344.                                                 FreeMem_(strp,180);
  345.                                             end;
  346.                                         end;
  347.                                     end;        
  348.                                     FreeAslRequest(cr);
  349.                                     rtUnLockWindow(TheWin, l);
  350.                                 end;
  351.     
  352.                                 G_OK : begin         
  353.                                     StrInfo := g[G_KEY]^.SpecialInfo;
  354.                                     Key := PtrToPas(strinfo^.Buffer);
  355.                                     if Length(Key) >= 1 then
  356.                                         node^.LSK_Key := UpCase(Key[1])
  357.                                     else
  358.                                         node^.LSK_Key := '';
  359.     
  360.                                     StrInfo := g[G_TXT]^.SpecialInfo;
  361.                                     node^.LSK_Name := PtrToPas(strinfo^.Buffer)+#0;
  362.     
  363.                                     StrInfo := g[G_CMDD]^.SpecialInfo;
  364.                                     node^.LSK_Cmd[0] := PtrToPas(strinfo^.Buffer);
  365.     
  366.                                     StrInfo := g[G_CMDF]^.SpecialInfo;
  367.                                     node^.LSK_Cmd[1] := PtrToPas(strinfo^.Buffer);
  368.     
  369.                                     StrInfo := g[G_RCMD]^.SpecialInfo;
  370.                                     node^.LSK_RexxCmd := PtrToPas(strinfo^.Buffer);
  371.     
  372.                                     StrInfo := g[G_RPORT]^.SpecialInfo;
  373.                                     node^.LSK_RexxPort := PtrToPas(strinfo^.Buffer);
  374.     
  375.                                     StrInfo := g[G_PRIORITY]^.SpecialInfo;
  376.                                     node^.LSK_priority := strinfo^.LongInt_;
  377.     
  378.                                     StrInfo := g[G_STACK]^.SpecialInfo;
  379.                                     node^.LSK_stack := strinfo^.LongInt_;
  380.     
  381.                                     node^.LSK_ASynch := False;
  382.                                     if G[G_SYNCH]^.Flags and GFLG_SELECTED <> 0 then 
  383.                                         node^.LSK_ASynch := True;
  384.     
  385.                                     StrInfo := g[G_OUT]^.SpecialInfo;
  386.                                     node^.LSK_Output := PtrToPas(strinfo^.Buffer);
  387.     
  388.                                     node^.LSK_NewShell := False;
  389.                                     if G[G_SHELL]^.Flags and GFLG_SELECTED <> 0 then 
  390.                                         node^.LSK_NewShell := True;
  391.                                         
  392.                                     StrInfo := g[G_SHELLT]^.SpecialInfo;
  393.                                     node^.LSK_ShellFrom := PtrToPas(strinfo^.Buffer);
  394.                                     
  395.                                     StrInfo := g[G_SHELLW]^.SpecialInfo;
  396.                                     node^.LSK_ShellWin := PtrToPas(strinfo^.Buffer);
  397.                                     
  398.                                     node^.LSK_Quit := False;
  399.                                     if G[G_QUIT]^.Flags and GFLG_SELECTED <> 0 then 
  400.                                         node^.LSK_Quit := True;
  401.     
  402.                                     ExitFlag := True;
  403.                                     ret := True;
  404.                                 end;
  405.                 
  406.                                 G_CAN : ExitFlag := True;
  407.                             End; (*case*)
  408.                         end;
  409.                     End; (*case*)
  410.                 end else cont := False;
  411.                 Until cont = True;
  412.             End; (*while*)
  413.             CloseWindow(TheWin);
  414.             FreeGadgets(g[NI]);
  415.         end;
  416.     end;
  417.     FreeRemember(@RK, true);
  418.     GadEDWindow := ret;
  419. end;